package sintatico;

import semantico.Semantico;
import lexico.Lexico;

public class Sintatico {
	Lexico lexico;
	String atomo;
	Semantico semantico;
	int est;
	
	public Sintatico (StringBuffer cadeia) {
		lexico = new Lexico(cadeia);
		semantico = new Semantico();
		atomo = new String();
		est = Estados._ESPERA_CARACTERE;
	}
	
	public boolean fazerAnalise(){
		
		semantico.inicioPrograma();
		
		do {
			atomo = lexico.getNextChar(true);
			switch(atomo.charAt(0)){
			case 'K':
			case 'k':
				est = Estados._2_RECEBE_K;
				break;
			
			case 'S':
			case 's':
				est = Estados._4_RECEBE_S;
				break;
			
			case 'I':
				est = Estados._1_RECEBE_I;
				break;
				
			case '(':
				est = Estados._10_RECEBE_ABRE_PARENTESES;
				break;
				
			case ')':
				est = Estados._15_RECEBE_FECHA_PARENTESES;
				break;
			case '/':
				break;
			default:
				throw new RuntimeException(atomo + ": Caractere não suportado");
			}
			semantico.fazerAcaoSemantica(est);
		} while (lexico.hasNextChar() && !atomo.equals("/"));

		semantico.montarMaravilhosaSaidaC();
		
		return true;
	}
	
	
}
